bitkeeper revision 1.1159.220.2 (41e6700bFJzLjEYlNh48j_cSTbRy9A)
authormafetter@fleming.research <mafetter@fleming.research>
Thu, 13 Jan 2005 12:56:43 +0000 (12:56 +0000)
committermafetter@fleming.research <mafetter@fleming.research>
Thu, 13 Jan 2005 12:56:43 +0000 (12:56 +0000)
Code duplication cleanup: remove a number of duplicate identical
static functions in xc_*_{build,restore}.c, replaced with single
(non-static) copy in xc_private.c

tools/libxc/xc_linux_build.c
tools/libxc/xc_linux_restore.c
tools/libxc/xc_plan9_build.c
tools/libxc/xc_private.c
tools/libxc/xc_private.h
tools/libxc/xc_vmx_build.c

index 2540819d5fd7bbbb90a413f185eb06e695f45894..0932f5cacfef602fcb30a82486795638fb751d84 100644 (file)
@@ -41,52 +41,6 @@ loadelfsymtab(
     char *elfbase, int xch, u32 dom, unsigned long *parray,
     struct domain_setup_info *dsi);
 
-static long get_tot_pages(int xc_handle, u32 domid)
-{
-    dom0_op_t op;
-    op.cmd = DOM0_GETDOMAININFO;
-    op.u.getdomaininfo.domain = (domid_t)domid;
-    op.u.getdomaininfo.ctxt = NULL;
-    return (do_dom0_op(xc_handle, &op) < 0) ? 
-        -1 : op.u.getdomaininfo.tot_pages;
-}
-
-static int get_pfn_list(int xc_handle,
-                        u32 domid, 
-                        unsigned long *pfn_buf, 
-                        unsigned long max_pfns)
-{
-    dom0_op_t op;
-    int ret;
-    op.cmd = DOM0_GETMEMLIST;
-    op.u.getmemlist.domain   = (domid_t)domid;
-    op.u.getmemlist.max_pfns = max_pfns;
-    op.u.getmemlist.buffer   = pfn_buf;
-
-    if ( mlock(pfn_buf, max_pfns * sizeof(unsigned long)) != 0 )
-        return -1;
-
-    ret = do_dom0_op(xc_handle, &op);
-
-    (void)munlock(pfn_buf, max_pfns * sizeof(unsigned long));
-
-    return (ret < 0) ? -1 : op.u.getmemlist.num_pfns;
-}
-
-static int copy_to_domain_page(int xc_handle,
-                               u32 domid,
-                               unsigned long dst_pfn, 
-                               void *src_page)
-{
-    void *vaddr = xc_map_foreign_range(
-        xc_handle, domid, PAGE_SIZE, PROT_WRITE, dst_pfn);
-    if ( vaddr == NULL )
-        return -1;
-    memcpy(vaddr, src_page, PAGE_SIZE);
-    munmap(vaddr, PAGE_SIZE);
-    return 0;
-}
-
 static int setup_guestos(int xc_handle,
                          u32 dom,
                          char *image, unsigned long image_size,
@@ -206,7 +160,7 @@ static int setup_guestos(int xc_handle,
         goto error_out;
     }
 
-    if ( get_pfn_list(xc_handle, dom, page_array, nr_pages) != nr_pages )
+    if ( xc_get_pfn_list(xc_handle, dom, page_array, nr_pages) != nr_pages )
     {
         PERROR("Could not get the page frame list");
         goto error_out;
@@ -229,7 +183,7 @@ static int setup_guestos(int xc_handle,
                 PERROR("Error reading initrd image, could not");
                 goto error_out;
             }
-            copy_to_domain_page(xc_handle, dom,
+            xc_copy_to_domain_page(xc_handle, dom,
                                 page_array[i>>PAGE_SHIFT], page);
         }
     }
@@ -364,69 +318,6 @@ static int setup_guestos(int xc_handle,
     return -1;
 }
 
-static unsigned long get_filesz(int fd)
-{
-    u16 sig;
-    u32 _sz = 0;
-    unsigned long sz;
-
-    lseek(fd, 0, SEEK_SET);
-    read(fd, &sig, sizeof(sig));
-    sz = lseek(fd, 0, SEEK_END);
-    if ( sig == 0x8b1f ) /* GZIP signature? */
-    {
-        lseek(fd, -4, SEEK_END);
-        read(fd, &_sz, 4);
-        sz = _sz;
-    }
-    lseek(fd, 0, SEEK_SET);
-
-    return sz;
-}
-
-static char *read_kernel_image(const char *filename, unsigned long *size)
-{
-    int kernel_fd = -1;
-    gzFile kernel_gfd = NULL;
-    char *image = NULL;
-    unsigned int bytes;
-
-    if ( (kernel_fd = open(filename, O_RDONLY)) < 0 )
-    {
-        PERROR("Could not open kernel image");
-        goto out;
-    }
-
-    *size = get_filesz(kernel_fd);
-
-    if ( (kernel_gfd = gzdopen(kernel_fd, "rb")) == NULL )
-    {
-        PERROR("Could not allocate decompression state for state file");
-        goto out;
-    }
-
-    if ( (image = malloc(*size)) == NULL )
-    {
-        PERROR("Could not allocate memory for kernel image");
-        goto out;
-    }
-
-    if ( (bytes = gzread(kernel_gfd, image, *size)) != *size )
-    {
-        PERROR("Error reading kernel image, could not"
-               " read the whole image (%d != %ld).", bytes, *size);
-        free(image);
-        image = NULL;
-    }
-
- out:
-    if ( kernel_gfd != NULL )
-        gzclose(kernel_gfd);
-    else if ( kernel_fd >= 0 )
-        close(kernel_fd);
-    return image;
-}
-
 int xc_linux_build(int xc_handle,
                    u32 domid,
                    const char *image_name,
@@ -445,13 +336,13 @@ int xc_linux_build(int xc_handle,
     unsigned long image_size, initrd_size=0;
     unsigned long vstartinfo_start, vkern_entry;
 
-    if ( (nr_pages = get_tot_pages(xc_handle, domid)) < 0 )
+    if ( (nr_pages = xc_get_tot_pages(xc_handle, domid)) < 0 )
     {
         PERROR("Could not find total pages for domain");
         goto error_out;
     }
 
-    if ( (image = read_kernel_image(image_name, &image_size)) == NULL )
+    if ( (image = xc_read_kernel_image(image_name, &image_size)) == NULL )
         goto error_out;
 
     if ( (ramdisk_name != NULL) && (strlen(ramdisk_name) != 0) )
@@ -462,7 +353,7 @@ int xc_linux_build(int xc_handle,
             goto error_out;
         }
 
-        initrd_size = get_filesz(initrd_fd);
+        initrd_size = xc_get_filesz(initrd_fd);
 
         if ( (initrd_gfd = gzdopen(initrd_fd, "rb")) == NULL )
         {
@@ -747,27 +638,6 @@ loadelfimage(
     return 0;
 }
 
-static void
-map_memcpy(
-    unsigned long dst, char *src, unsigned long size,
-    int xch, u32 dom, unsigned long *parray, unsigned long vstart)
-{
-    char *va;
-    unsigned long chunksz, done, pa;
-
-    for ( done = 0; done < size; done += chunksz )
-    {
-        pa = dst + done - vstart;
-        va = xc_map_foreign_range(
-            xch, dom, PAGE_SIZE, PROT_WRITE, parray[pa>>PAGE_SHIFT]);
-        chunksz = size - done;
-        if ( chunksz > (PAGE_SIZE - (pa & (PAGE_SIZE-1))) )
-            chunksz = PAGE_SIZE - (pa & (PAGE_SIZE-1));
-        memcpy(va + (pa & (PAGE_SIZE-1)), src + done, chunksz);
-        munmap(va, PAGE_SIZE);
-    }
-}
-
 #define ELFROUND (ELFSIZE / 8)
 
 static int
@@ -818,7 +688,7 @@ loadelfsymtab(
              (shdr[h].sh_type == SHT_SYMTAB) )
         {
             if ( parray != NULL )
-                map_memcpy(maxva, elfbase + shdr[h].sh_offset, shdr[h].sh_size,
+                xc_map_memcpy(maxva, elfbase + shdr[h].sh_offset, shdr[h].sh_size,
                            xch, dom, parray, dsi->v_start);
 
             /* Mangled to be based on ELF header location. */
@@ -850,7 +720,7 @@ loadelfsymtab(
         sym_ehdr->e_shstrndx = SHN_UNDEF;
 
         /* Copy total length, crafted ELF header and section header table */
-        map_memcpy(symva, p, sizeof(int) + sizeof(Elf_Ehdr) +
+        xc_map_memcpy(symva, p, sizeof(int) + sizeof(Elf_Ehdr) +
                    ehdr->e_shnum * sizeof(Elf_Shdr), xch, dom, parray,
                    dsi->v_start);
     }
index 55f9717802ed44b192caace7549546cb6d6cf961..d7ed2d677659b06ff241bfe087dd1f6bd94d0da8 100644 (file)
 #define DPRINTF(_f, _a...) ((void)0)
 #endif
 
-static int get_pfn_list(int xc_handle,
-                        u32 domain_id, 
-                        unsigned long *pfn_buf, 
-                        unsigned long max_pfns)
-{
-    dom0_op_t op;
-    int ret;
-    op.cmd = DOM0_GETMEMLIST;
-    op.u.getmemlist.domain   = (domid_t)domain_id;
-    op.u.getmemlist.max_pfns = max_pfns;
-    op.u.getmemlist.buffer   = pfn_buf;
-
-    if ( mlock(pfn_buf, max_pfns * sizeof(unsigned long)) != 0 )
-    {
-        PERROR("Could not lock pfn list buffer");
-        return -1;
-    }    
-
-    ret = do_dom0_op(xc_handle, &op);
-
-    (void)munlock(pfn_buf, max_pfns * sizeof(unsigned long));
-
-    return (ret < 0) ? -1 : op.u.getmemlist.num_pfns;
-}
-
 /** Read the vmconfig string from the state input.
  * It is stored as a 4-byte count 'n' followed by n bytes.
  * The config data is stored in a new string in 'ioctxt->vmconfig',
@@ -220,7 +195,7 @@ int xc_linux_restore(int xc_handle, XcIOContext *ioctxt)
     }
 
     /* Build the pfn-to-mfn table. We choose MFN ordering returned by Xen. */
-    if ( get_pfn_list(xc_handle, dom, pfn_to_mfn_table, nr_pfns) != nr_pfns )
+    if ( xc_get_pfn_list(xc_handle, dom, pfn_to_mfn_table, nr_pfns) != nr_pfns )
     {
         xcio_error(ioctxt, "Did not read correct number of frame "
                    "numbers for new dom");
index 33c9a54914c1a6be0523639279e9ae3323c1a234..819969c57dbaa2bb88faf669ca2a004646a4c6e0 100755 (executable)
@@ -132,52 +132,6 @@ static int
 #define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED)
 #define L2_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER)
 
-static long
-get_tot_pages(int xc_handle, u32 domid)
-{
-       dom0_op_t op;
-       op.cmd = DOM0_GETDOMAININFO;
-       op.u.getdomaininfo.domain = (domid_t) domid;
-       op.u.getdomaininfo.ctxt = NULL;
-       return (do_dom0_op(xc_handle, &op) < 0) ?
-           -1 : op.u.getdomaininfo.tot_pages;
-}
-
-static int
-get_pfn_list(int xc_handle,
-            u32 domid, unsigned long *pfn_buf, unsigned long max_pfns)
-{
-       dom0_op_t op;
-       int ret;
-       op.cmd = DOM0_GETMEMLIST;
-       op.u.getmemlist.domain = (domid_t) domid;
-       op.u.getmemlist.max_pfns = max_pfns;
-       op.u.getmemlist.buffer = pfn_buf;
-
-       if (mlock(pfn_buf, max_pfns * sizeof (unsigned long)) != 0)
-               return -1;
-
-       ret = do_dom0_op(xc_handle, &op);
-
-       (void) munlock(pfn_buf, max_pfns * sizeof (unsigned long));
-
-#if 0
-#ifdef DEBUG
-       DPRINTF(("Ret for get_pfn_list is %d\n", ret));
-       if (ret >= 0) {
-               int i, j;
-               for (i = 0; i < op.u.getmemlist.num_pfns; i += 16) {
-                       fprintf(stderr, "0x%x: ", i);
-                       for (j = 0; j < 16; j++)
-                               fprintf(stderr, "0x%lx ", pfn_buf[i + j]);
-                       fprintf(stderr, "\n");
-               }
-       }
-#endif
-#endif
-       return (ret < 0) ? -1 : op.u.getmemlist.num_pfns;
-}
-
 static int
 setup_guestos(int xc_handle,
              u32 dom,
@@ -216,7 +170,7 @@ setup_guestos(int xc_handle,
                goto error_out;
        }
 
-       if (get_pfn_list(xc_handle, dom, cpage_array, tot_pages) != tot_pages) {
+       if (xc_get_pfn_list(xc_handle, dom, cpage_array, tot_pages) != tot_pages) {
                PERROR("Could not get the page frame list");
                goto error_out;
        }
@@ -487,11 +441,11 @@ xc_plan9_build(int xc_handle,
        full_execution_context_t st_ctxt, *ctxt = &st_ctxt;
        unsigned long virt_startinfo_addr;
 
-       if ((tot_pages = get_tot_pages(xc_handle, domid)) < 0) {
+       if ((tot_pages = xc_get_tot_pages(xc_handle, domid)) < 0) {
                PERROR("Could not find total pages for domain");
                return 1;
        }
-       DPRINTF(("get_tot_pages returns %ld pages\n", tot_pages));
+       DPRINTF(("xc_get_tot_pages returns %ld pages\n", tot_pages));
 
        kernel_fd = open(image_name, O_RDONLY);
        if (kernel_fd < 0) {
@@ -505,7 +459,7 @@ xc_plan9_build(int xc_handle,
                return 1;
        }
 
-       DPRINTF(("get_tot_pages returns %ld pages\n", tot_pages));
+       DPRINTF(("xc_get_tot_pages returns %ld pages\n", tot_pages));
        if (mlock(&st_ctxt, sizeof (st_ctxt))) {
                PERROR("Unable to mlock ctxt");
                return 1;
@@ -519,7 +473,7 @@ xc_plan9_build(int xc_handle,
                PERROR("Could not get info on domain");
                goto error_out;
        }
-       DPRINTF(("get_tot_pages returns %ld pages\n", tot_pages));
+       DPRINTF(("xc_get_tot_pages returns %ld pages\n", tot_pages));
 
        if (!(op.u.getdomaininfo.flags & DOMFLAGS_PAUSED)
            || (op.u.getdomaininfo.ctxt->pt_base != 0)) {
@@ -527,7 +481,7 @@ xc_plan9_build(int xc_handle,
                goto error_out;
        }
 
-       DPRINTF(("get_tot_pages returns %ld pages\n", tot_pages));
+       DPRINTF(("xc_get_tot_pages returns %ld pages\n", tot_pages));
        if (setup_guestos(xc_handle, domid, kernel_gfd, tot_pages,
                          &virt_startinfo_addr,
                          &load_addr, &st_ctxt, cmdline,
index e4316e6994059f04cea1dd9e640e316dd8c63203..cbf42cc68fbba922458d1d73ac80afc2eb53902d 100644 (file)
@@ -4,6 +4,7 @@
  * Helper functions for the rest of the library.
  */
 
+#include <zlib.h>
 #include "xc_private.h"
 
 void *xc_map_foreign_batch(int xc_handle, u32 dom, int prot,
@@ -201,5 +202,150 @@ unsigned long xc_get_m2p_start_mfn ( int xc_handle )
     return mfn;
 }
 
+int xc_get_pfn_list(int xc_handle,
+                u32 domid, 
+                unsigned long *pfn_buf, 
+                unsigned long max_pfns)
+{
+    dom0_op_t op;
+    int ret;
+    op.cmd = DOM0_GETMEMLIST;
+    op.u.getmemlist.domain   = (domid_t)domid;
+    op.u.getmemlist.max_pfns = max_pfns;
+    op.u.getmemlist.buffer   = pfn_buf;
+
+
+    if ( mlock(pfn_buf, max_pfns * sizeof(unsigned long)) != 0 )
+    {
+        PERROR("Could not lock pfn list buffer");
+        return -1;
+    }    
+
+    ret = do_dom0_op(xc_handle, &op);
+
+    (void)munlock(pfn_buf, max_pfns * sizeof(unsigned long));
+
+#if 0
+#ifdef DEBUG
+       DPRINTF(("Ret for xc_get_pfn_list is %d\n", ret));
+       if (ret >= 0) {
+               int i, j;
+               for (i = 0; i < op.u.getmemlist.num_pfns; i += 16) {
+                       fprintf(stderr, "0x%x: ", i);
+                       for (j = 0; j < 16; j++)
+                               fprintf(stderr, "0x%lx ", pfn_buf[i + j]);
+                       fprintf(stderr, "\n");
+               }
+       }
+#endif
+#endif
+
+    return (ret < 0) ? -1 : op.u.getmemlist.num_pfns;
+}
+
+long xc_get_tot_pages(int xc_handle, u32 domid)
+{
+    dom0_op_t op;
+    op.cmd = DOM0_GETDOMAININFO;
+    op.u.getdomaininfo.domain = (domid_t)domid;
+    op.u.getdomaininfo.ctxt = NULL;
+    return (do_dom0_op(xc_handle, &op) < 0) ? 
+        -1 : op.u.getdomaininfo.tot_pages;
+}
+
+int xc_copy_to_domain_page(int xc_handle,
+                                   u32 domid,
+                                   unsigned long dst_pfn, 
+                                   void *src_page)
+{
+    void *vaddr = xc_map_foreign_range(
+        xc_handle, domid, PAGE_SIZE, PROT_WRITE, dst_pfn);
+    if ( vaddr == NULL )
+        return -1;
+    memcpy(vaddr, src_page, PAGE_SIZE);
+    munmap(vaddr, PAGE_SIZE);
+    return 0;
+}
+
+unsigned long xc_get_filesz(int fd)
+{
+    u16 sig;
+    u32 _sz = 0;
+    unsigned long sz;
+
+    lseek(fd, 0, SEEK_SET);
+    read(fd, &sig, sizeof(sig));
+    sz = lseek(fd, 0, SEEK_END);
+    if ( sig == 0x8b1f ) /* GZIP signature? */
+    {
+        lseek(fd, -4, SEEK_END);
+        read(fd, &_sz, 4);
+        sz = _sz;
+    }
+    lseek(fd, 0, SEEK_SET);
+
+    return sz;
+}
 
+char *xc_read_kernel_image(const char *filename, unsigned long *size)
+{
+    int kernel_fd = -1;
+    gzFile kernel_gfd = NULL;
+    char *image = NULL;
+    unsigned int bytes;
 
+    if ( (kernel_fd = open(filename, O_RDONLY)) < 0 )
+    {
+        PERROR("Could not open kernel image");
+        goto out;
+    }
+
+    *size = xc_get_filesz(kernel_fd);
+
+    if ( (kernel_gfd = gzdopen(kernel_fd, "rb")) == NULL )
+    {
+        PERROR("Could not allocate decompression state for state file");
+        goto out;
+    }
+
+    if ( (image = malloc(*size)) == NULL )
+    {
+        PERROR("Could not allocate memory for kernel image");
+        goto out;
+    }
+
+    if ( (bytes = gzread(kernel_gfd, image, *size)) != *size )
+    {
+        PERROR("Error reading kernel image, could not"
+               " read the whole image (%d != %ld).", bytes, *size);
+        free(image);
+        image = NULL;
+    }
+
+ out:
+    if ( kernel_gfd != NULL )
+        gzclose(kernel_gfd);
+    else if ( kernel_fd >= 0 )
+        close(kernel_fd);
+    return image;
+}
+
+void xc_map_memcpy(unsigned long dst, char *src, unsigned long size,
+                   int xch, u32 dom, unsigned long *parray,
+                   unsigned long vstart)
+{
+    char *va;
+    unsigned long chunksz, done, pa;
+
+    for ( done = 0; done < size; done += chunksz )
+    {
+        pa = dst + done - vstart;
+        va = xc_map_foreign_range(
+            xch, dom, PAGE_SIZE, PROT_WRITE, parray[pa>>PAGE_SHIFT]);
+        chunksz = size - done;
+        if ( chunksz > (PAGE_SIZE - (pa & (PAGE_SIZE-1))) )
+            chunksz = PAGE_SIZE - (pa & (PAGE_SIZE-1));
+        memcpy(va + (pa & (PAGE_SIZE-1)), src + done, chunksz);
+        munmap(va, PAGE_SIZE);
+    }
+}
index c05ae491d9951950eefbd062e01b9873a3012f87..0aed21274e1fefb7e8edb7c13ce587d2869aa6ff 100644 (file)
@@ -189,4 +189,17 @@ typedef struct mfn_mapper {
 
 unsigned long xc_get_m2p_start_mfn ( int xc_handle );
 
+long xc_get_tot_pages(int xc_handle, u32 domid);
+
+int xc_copy_to_domain_page(int xc_handle, u32 domid,
+                            unsigned long dst_pfn, void *src_page);
+
+unsigned long xc_get_filesz(int fd);
+
+char *xc_read_kernel_image(const char *filename, unsigned long *size);
+
+void xc_map_memcpy(unsigned long dst, char *src, unsigned long size,
+                   int xch, u32 dom, unsigned long *parray,
+                   unsigned long vstart);
+
 #endif /* __XC_PRIVATE_H__ */
index 13541701b06587596bb517f12d6f501e5985cde0..58f31cd79725a9000dd6b2b367eda8c25e73fcbb 100644 (file)
@@ -46,53 +46,6 @@ loadelfsymtab(
     char *elfbase, int xch, u32 dom, unsigned long *parray,
     struct domain_setup_info *dsi);
 
-static long get_tot_pages(int xc_handle, u32 domid)
-{
-    dom0_op_t op;
-    op.cmd = DOM0_GETDOMAININFO;
-    op.u.getdomaininfo.domain = (domid_t)domid;
-    op.u.getdomaininfo.ctxt = NULL;
-    return (do_dom0_op(xc_handle, &op) < 0) ? 
-        -1 : op.u.getdomaininfo.tot_pages;
-}
-
-int xc_get_pfn_list(int xc_handle,
-                u32 domid, 
-                unsigned long *pfn_buf, 
-                unsigned long max_pfns)
-{
-    dom0_op_t op;
-    int ret;
-    op.cmd = DOM0_GETMEMLIST;
-    op.u.getmemlist.domain   = (domid_t)domid;
-    op.u.getmemlist.max_pfns = max_pfns;
-    op.u.getmemlist.buffer   = pfn_buf;
-
-
-    if ( mlock(pfn_buf, max_pfns * sizeof(unsigned long)) != 0 )
-        return -1;
-
-    ret = do_dom0_op(xc_handle, &op);
-
-    (void)munlock(pfn_buf, max_pfns * sizeof(unsigned long));
-
-    return (ret < 0) ? -1 : op.u.getmemlist.num_pfns;
-}
-
-static int copy_to_domain_page(int xc_handle,
-                               u32 domid,
-                               unsigned long dst_pfn, 
-                               void *src_page)
-{
-    void *vaddr = xc_map_foreign_range(
-        xc_handle, domid, PAGE_SIZE, PROT_WRITE, dst_pfn);
-    if ( vaddr == NULL )
-        return -1;
-    memcpy(vaddr, src_page, PAGE_SIZE);
-    munmap(vaddr, PAGE_SIZE);
-    return 0;
-}
-
 static int setup_guestos(int xc_handle,
                          u32 dom,
                          char *image, unsigned long image_size,
@@ -225,7 +178,7 @@ static int setup_guestos(int xc_handle,
                 PERROR("Error reading initrd image, could not");
                 goto error_out;
             }
-            copy_to_domain_page(xc_handle, dom,
+            xc_copy_to_domain_page(xc_handle, dom,
                                 page_array[i>>PAGE_SHIFT], page);
         }
     }
@@ -402,68 +355,6 @@ static int setup_guestos(int xc_handle,
     return -1;
 }
 
-static unsigned long get_filesz(int fd)
-{
-    u16 sig;
-    u32 _sz = 0;
-    unsigned long sz;
-
-    lseek(fd, 0, SEEK_SET);
-    read(fd, &sig, sizeof(sig));
-    sz = lseek(fd, 0, SEEK_END);
-    if ( sig == 0x8b1f ) /* GZIP signature? */
-    {
-        lseek(fd, -4, SEEK_END);
-        read(fd, &_sz, 4);
-        sz = _sz;
-    }
-    lseek(fd, 0, SEEK_SET);
-
-    return sz;
-}
-
-static char *read_kernel_image(const char *filename, unsigned long *size)
-{
-    int kernel_fd = -1;
-    gzFile kernel_gfd = NULL;
-    char *image = NULL;
-    unsigned int bytes;
-
-    if ( (kernel_fd = open(filename, O_RDONLY)) < 0 )
-    {
-        PERROR("Could not open kernel image");
-        goto out;
-    }
-
-    *size = get_filesz(kernel_fd);
-
-    if ( (kernel_gfd = gzdopen(kernel_fd, "rb")) == NULL )
-    {
-        PERROR("Could not allocate decompression state for state file");
-        goto out;
-    }
-
-    if ( (image = malloc(*size)) == NULL )
-    {
-        PERROR("Could not allocate memory for kernel image");
-        goto out;
-    }
-
-    if ( (bytes = gzread(kernel_gfd, image, *size)) != *size )
-    {
-        PERROR("Error reading kernel image, could not"
-               " read the whole image (%d != %ld).", bytes, *size);
-        free(image);
-        image = NULL;
-    }
-
- out:
-    if ( kernel_gfd != NULL )
-        gzclose(kernel_gfd);
-    else if ( kernel_fd >= 0 )
-        close(kernel_fd);
-    return image;
-}
 
 #define VMX_FEATURE_FLAG 0x20
 
@@ -505,13 +396,13 @@ int xc_vmx_build(int xc_handle,
         goto error_out;
     }
     
-    if ( (nr_pages = get_tot_pages(xc_handle, domid)) < 0 )
+    if ( (nr_pages = xc_get_tot_pages(xc_handle, domid)) < 0 )
     {
         PERROR("Could not find total pages for domain");
         goto error_out;
     }
 
-    if ( (image = read_kernel_image(image_name, &image_size)) == NULL )
+    if ( (image = xc_read_kernel_image(image_name, &image_size)) == NULL )
         goto error_out;
 
     if ( (ramdisk_name != NULL) && (strlen(ramdisk_name) != 0) )
@@ -522,7 +413,7 @@ int xc_vmx_build(int xc_handle,
             goto error_out;
         }
 
-        initrd_size = get_filesz(initrd_fd);
+        initrd_size = xc_get_filesz(initrd_fd);
 
         if ( (initrd_gfd = gzdopen(initrd_fd, "rb")) == NULL )
         {
@@ -746,26 +637,6 @@ loadelfimage(
     return 0;
 }
 
-static void
-map_memcpy(
-    unsigned long dst, char *src, unsigned long size,
-    int xch, u32 dom, unsigned long *parray, unsigned long vstart)
-{
-    char *va;
-    unsigned long chunksz, done, pa;
-
-    for ( done = 0; done < size; done += chunksz )
-    {
-        pa = dst + done - vstart;
-        va = xc_map_foreign_range(
-            xch, dom, PAGE_SIZE, PROT_WRITE, parray[pa>>PAGE_SHIFT]);
-        chunksz = size - done;
-        if ( chunksz > (PAGE_SIZE - (pa & (PAGE_SIZE-1))) )
-            chunksz = PAGE_SIZE - (pa & (PAGE_SIZE-1));
-        memcpy(va + (pa & (PAGE_SIZE-1)), src + done, chunksz);
-        munmap(va, PAGE_SIZE);
-    }
-}
 
 #define ELFROUND (ELFSIZE / 8)
 
@@ -817,7 +688,7 @@ loadelfsymtab(
              (shdr[h].sh_type == SHT_SYMTAB) )
         {
             if ( parray != NULL )
-                map_memcpy(maxva, elfbase + shdr[h].sh_offset, shdr[h].sh_size,
+                xc_map_memcpy(maxva, elfbase + shdr[h].sh_offset, shdr[h].sh_size,
                            xch, dom, parray, dsi->v_start);
 
             /* Mangled to be based on ELF header location. */
@@ -849,7 +720,7 @@ loadelfsymtab(
         sym_ehdr->e_shstrndx = SHN_UNDEF;
 
         /* Copy total length, crafted ELF header and section header table */
-        map_memcpy(symva, p, sizeof(int) + sizeof(Elf_Ehdr) +
+        xc_map_memcpy(symva, p, sizeof(int) + sizeof(Elf_Ehdr) +
                    ehdr->e_shnum * sizeof(Elf_Shdr), xch, dom, parray,
                    dsi->v_start);
     }